package Dominio;

public class Reglas {

	/** Definición de los atributos */

	static final int comodine = 13;

    //se permite jugar con comodines
	boolean comodin;


	double barajaxjugador;

	/*Si tipo = true entonces cuando alguien cierra, todos los demás jugadores se suman los
	puntos que tenían en ese momento en su mano. Si tipo = false entonces cuando alguien cierra
	se le suman todos los demás puntos de las manos de los otros jugadores */
	boolean tipo;


	//la mano formada por cinco parejas se considera válida
	boolean cincoparejas;

	//el tiempo principal que disponen los jugadores para jugar
	int tiempoprincipal;


	/*el tiempo que se le asigna a cada jugador al principio de cada turno suyo si
    ya ha consumido su tiempo principal para que pueda seguir jugando*/
	int tiempojugada;

	//la partida dura un determinado turnos
	int limiteturno;

	//se ponen límite de puntos para finalizar la partida
	int limitepuntos;

	/*Si eliminación está a true se van eliminando los jugadores conforme
	pasan el tope. Si está a false una vez llegan al tope, se les asigna la posición y los puntos en esa
	partida, pero siguen jugando para que el juego siga en las misma condiciones*/
	boolean eliminacion;

	/** Definición de los métodos */


	/**
	* Constructor de una regla
	*/

	public Reglas(boolean comodin, double barajaxjugador, boolean tipo, boolean cincoparejas, int tiempoprincipal,
			int tiempojugada, int limiteturno, int limitepuntos, boolean eliminacion) {

		this.comodin=comodin;
		this.barajaxjugador=barajaxjugador;
		this.tipo=tipo;
		this.cincoparejas=cincoparejas;
		this.tiempojugada=tiempojugada;
		this.tiempoprincipal=tiempoprincipal;
		this.limitepuntos=limitepuntos;
		this.limiteturno=limiteturno;
		this.eliminacion=eliminacion;


	}//END_METHOD

	/**
	* Descripción: devuelve un bool que dice si es possible de jugar con comodin
	* @return comodin
	*/
	public boolean getComodin(){
		return comodin;
	}//END_METHOD

	/**
	* Descripción: devuelve el número de jugadores por cada baraja
	* @return barajaxjugador
	*/
	public double getBarajaxjugador(){
		return barajaxjugador;
	}//END_METHOD

	/**
	* Descripción: devuelve el tipo
	* @return tipo
	*/
	public boolean getTipo(){
		return tipo;
	}//END_METHOD

	/**
	* Descripción: devuelve si la mano formada por cinco parejas se considera válida
	* @return cincoparejas
	*/
	public boolean getCincoparejas() {

		return cincoparejas;

	}//END_METHOD

	/**
	* Descripción: devuelve el tiempo principal que disponen los jugadores para jugar
	* @return tiempoprincipal
	*/
	public int getTiempoprincipal() {
		return tiempoprincipal;
	}//END_METHOD

	/**
	* Descripción: devuelve el tiempo que se le asigna a cada jugador al principio de cada turno suyo si
    * ya ha consumido su tiempo principal para que pueda seguir jugando
	* @return  tiempojugada
	*/
	public int getTiempojugada(){
		return tiempojugada;

	}//END_METHOD

	/**
	* Descripción: devuelve el nombre de turnos que dura la partida
	* @return limiteturno
	*/
	public int getLimiteJuegos() {
		return limiteturno;
	}//END_METHOD

	/**
	* Descripción: devuelve la limite de puntos para finalizar la partida
	* @return limitepuntos
	*/
	public int getLimitepuntos(){
		return limitepuntos;
	}//END_METHOD

	/**
	* Descripción: devuelve eliminacion
	* @return eliminacion
	*/
	public boolean getEliminacion() {
		return eliminacion;
	}//END_METHOD


	public int getValorComodin() {
		return comodine;
	}



	/**
	* poner valor a comodin
	* @param b
	*/
	public void setComodin(boolean b) {
		comodin=b;
	}//END_METHOD

	/**
	* poner valor a barajaxjugador
	* @param b
	*/
	public void setBarajaxjugador(double i) {
		barajaxjugador= i;
	}//END_METHOD


	/**
	* poner valor a tipo
	* @param b
	*/
	public void setTipo(boolean b) {
		tipo=b;
	}//END_METHOD

	/**
	* poner valor a cincoparejas
	* @param b
	*/
	public void setCincoparejas (boolean b){
		cincoparejas=b;

	}//END_METHOD

	/**
	* poner valor a tiempoprincipal
	* @param i
	*/
	public void setTiempoprincipal(int i) {
		tiempoprincipal=i;
	}//END_METHOD

	/**
	* poner valor a limiteturno
	* @param i
	*/
	public void setLimiteturno( int i){

		limiteturno= i;
	}//END_METHOD

	/**
	* poner valor a limitepuntos
	* @param i
	*/
	public void setLimitepuntos(int i) {

		limitepuntos= i;
	}//END_METHOD

	/**
	* poner valor a eliminacion
	* @param b
	*/
	public void setEliminacion(boolean b) {
		eliminacion=b;
	}//END_METHOD


	//agrupacion
	public int calcularPuntuacion(int numcarta,int valorcarta,boolean comodin) {
		int r;
		if(!comodin){
		r=valorcarta*numcarta*2;
		}
		else {
			r=valorcarta*numcarta;
		}
		return r;

	}//END_METHOD

	//escalera
	public int calcularPuntuacion(int numcarta,int valorcarta,boolean comodin,boolean color){
		int r = 0;
		if(!comodin && !color){
			r=numcarta*valorcarta*6;
		}
		else if (!comodin && color) {

			r=numcarta*valorcarta*6*4;

		}

        else if (comodin && !color) {

			r=numcarta*valorcarta*5;

		}

        else if (comodin && color) {

			r=numcarta*valorcarta*3*5;

		}
		return r;


	}//END_METHOD

	//cinco parejas
	public int calcularPuntuacion(int valor1,int valor2,int valor3, int valor4, int valor5,boolean comodin) {

		int r;

		r=2*(valor1+valor2+valor3+valor4+valor5);


		return r;

	}//END_METHOD



}//END_CLASS
